From: Keir Fraser Date: Tue, 16 Jun 2009 12:41:17 +0000 (+0100) Subject: vtd: ats and queued invalidation cleanup X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13760 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22%22/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22%22?a=commitdiff_plain;h=767d7a478a86cb1a77f58bf0686a2df212d5a755;p=xen.git vtd: ats and queued invalidation cleanup Use iommu_qinval in place of qinval_enabled flag. Use ecap_queued_inval() for determining whether queued invalidation is available on this vt-d engine or not. Signed-off-by: Allen Kay --- diff --git a/xen/drivers/passthrough/vtd/qinval.c b/xen/drivers/passthrough/vtd/qinval.c index 528b4d809e..c4f542f814 100644 --- a/xen/drivers/passthrough/vtd/qinval.c +++ b/xen/drivers/passthrough/vtd/qinval.c @@ -29,8 +29,6 @@ #include "vtd.h" #include "extern.h" -int qinval_enabled; - static void print_qi_regs(struct iommu *iommu) { u64 val; @@ -465,7 +463,6 @@ int enable_qinval(struct iommu *iommu) (sts & DMA_GSTS_QIES), sts); spin_unlock_irqrestore(&iommu->register_lock, flags); - qinval_enabled = 1; return 0; } diff --git a/xen/drivers/passthrough/vtd/x86/ats.c b/xen/drivers/passthrough/vtd/x86/ats.c index 0afad61e4d..8a180d370e 100644 --- a/xen/drivers/passthrough/vtd/x86/ats.c +++ b/xen/drivers/passthrough/vtd/x86/ats.c @@ -87,15 +87,13 @@ int ats_device(int seg, int bus, int devfn) struct pci_dev *pdev; int pos = 0; - if ( !ats_enabled ) - return 0; - - if ( !qinval_enabled ) + if ( !ats_enabled || !iommu_qinval ) return 0; pdev = pci_get_pdev(bus, devfn); drhd = acpi_find_matched_drhd_unit(pdev); - if ( !ecap_dev_iotlb(drhd->iommu->ecap) ) + if ( !ecap_queued_inval(drhd->iommu->ecap) || + !ecap_dev_iotlb(drhd->iommu->ecap) ) return 0; if ( !acpi_find_matched_atsr_unit(bus, devfn) )